#pragma once

#define UDP_PORT 12345
#define DST_IP "192.168.118.205" // 接收端IP地址（电脑端IP地址）
// #define DST_IP "192.168.137.205" // 接收端IP地址（电脑端IP地址）

//////////////// C++标准库 //////////////////////////////
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <queue>
#include <stack>
#include <filesystem>
#include <chrono>
#include <ctime>
#include <sstream>
#include <thread>
#include <mutex>
#include <atomic>
#include <iomanip>
#include <numeric>
#include <cstdint>

//////////////// C标准库 ////////////////////////////////
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h> // 共享内存
#include <sys/sem.h> // 信号量集

//////////////// OpenCV头文件 ///////////////////////////
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

//////////////// 龙邱库文件 /////////////////////////////
#include "LQ_PWM.hpp"
#include "LQ_GTIM_PWM.hpp"
#include "LQ_GPIO.hpp"
#include "LQ_PWM_ENCODER.hpp"
#include "LQ_TFT18.hpp"
#include "LQ_SOFT_I2C.hpp"
#include "LQ_HW_GPIO.hpp"
#include "LQ_HW_PWM.hpp"
#include "LQ_HW_SPI.hpp"
#include "LQ_SOFT_I2C_Gyro.hpp"
#include "LQ_Uart.hpp"
#include "LQ_MPU6050.hpp"
#include "LQ_TCP_Client.hpp"
#include "LQ_UDP_Client.hpp"
#include "LQ_TFT18_dri.hpp"

//////////////// 自定义库文件 //////////////////////////////
#include "PIT.hpp"         //  中断
#include "PID.hpp"         //  PID控制
#include "Image.hpp"       //  图像处理
#include "Imagepro.hpp"    //  图像处理
#include "UDP_send.hpp"    //  UDP发送
#include "TFT_display.hpp" //  TFT显示
#include "Control.hpp"     //  控制
#include "Init_dev.hpp"    //  设备初始化
#include "Drive.hpp"
#include "key.hpp"
#include "UI.hpp" //  UI
#include "Island.hpp"
#include "IMAG.hpp"
#include "Gyro.hpp"

// 全局变量声明（不可使用extern volatile）
// 电机
extern SetPWM LMotorPWM;
extern SetPWM RMotorPWM;
extern HWGpio LMotorDir;
extern HWGpio RMotorDir;
// 舵机 负压
extern GtimPwm servo, NP;

// 编码器
extern LS_PwmEncoder EncodersL;
extern LS_PwmEncoder EncodersR;
// 按键
extern HWGpio Gpio1; // 44
extern HWGpio Gpio2; // 45
extern HWGpio Gpio3; // 42
extern HWGpio Gpio4; // 43
// 陀螺仪
extern LS_I2C_DEV app;

const int servo_angle_max = 168000;
const int servo_angle_min = 136000;
const int servo_angle_mid = 151600;
const int angle_goal = 0;
const int motor_speed_max = 80000; // 直道最大占空比
const float angle_img_max = 40.0;
const float angle_img_min = -40.0;

